#ifndef SCENE_OBJECT_H_H_H
#define SCENE_OBJECT_H_H_H

#include <App/PropertyStandard.h>
#include "PrimitiveFeature.h"
#include "App/PropertyFile.h"

namespace App
{
	class PropertyFileIncluded;
}
namespace Part
{

	struct MatArray
	{
		std::string materialName;
		CKMaterial* curMaterial;
	};

class sceneObject  :public Part::Primitive
{

    PROPERTY_HEADER(Part::sceneObject);
public:
	sceneObject(void);
	~sceneObject(void);



	App::PropertyLength Length,Height,Width;
    App::PropertyEnumeration MaterialList;
	App::PropertyFile TextureFile;
	App::PropertyEnumeration ShadowSel	;

	/** @name methods override feature */
	//@{
	/// recalculate the Feature
	App::DocumentObjectExecReturn *execute(void);
	short mustExecute() const;
	/// returns the type name of the ViewProvider
	const char* getViewProviderName(void) const {
		return "PartGui::ViewProviderBox";
	}
	// void Save (Base::Writer &writer);

	//App::PropertyFileIncluded VrmlFile;
	//App::PropertyFile testfrile;

	// CKCharacter*  pChara;
protected:
		void Restore(Base::XMLReader &reader);
	/// get called by the container when a property has changed
	virtual void onChanged (const App::Property* prop);

	void updateMaterial();

	CKMaterial* getMaterialbyName(const char*);



	std::vector<MatArray> getDisplayModes(void) const;
	//@}

private:
	std::vector<const char*> aDisplayEnumsArray;
	std::vector<MatArray> aDisplayModesArray;

	//std::vector<MatArray> MaterialArray;

	const char* matName;
	CK3dEntity* pChara;

	static const char* ShadowEnums[];

	bool isGet;
};



};


#endif